/**
 * XTeaKeyTest
 *
 * A test class for XTeaKey
 * Copyright (c) 2007 Henri Torgemane
 *
 * See LICENSE.txt for full license information.
 */
package com.hurlant.crypto.tests
{
	import com.hurlant.crypto.prng.Random;
	import com.hurlant.crypto.symmetric.ECBMode;
	import com.hurlant.crypto.symmetric.XTeaKey;
	import com.hurlant.util.Hex;

	import flash.utils.ByteArray;
	import flash.utils.getTimer;

	public class XTeaKeyTest extends TestCase
	{
		public function XTeaKeyTest(h:ITestHarness)
		{
			super(h, "XTeaKey Test");
			runTest(testGetBlockSize, "XTea Block Size");
			runTest(testVectors, "XTea Test Vectors");

			h.endTestCase();
		}

		public function testGetBlockSize():void
		{
			var tea:XTeaKey=new XTeaKey(Hex.toArray("deadbabecafebeefdeadbabecafebeef"));
			assert("tea blocksize", tea.getBlockSize() == 8);
		}

		public function testVectors():void
		{
			// blah.
			// can't find working test vectors.
			// algorithms should not get published without vectors :(
			var keys:Array=["00000000000000000000000000000000", "2b02056806144976775d0e266c287843"];
			var pts:Array=["0000000000000000", "74657374206d652e"];
			var cts:Array=["2dc7e8d3695b0538", "7909582138198783"];
			// self-fullfilling vectors.
			// oh well, at least I can decrypt what I produce. :(

			for (var i:uint=0; i < keys.length; i++)
			{
				var key:ByteArray=Hex.toArray(keys[i]);
				var pt:ByteArray=Hex.toArray(pts[i]);
				var tea:XTeaKey=new XTeaKey(key);
				tea.encrypt(pt);
				var out:String=Hex.fromArray(pt);
				assert("comparing " + cts[i] + " to " + out, cts[i] == out);
				// now go back to plaintext.
				pt.position=0;
				tea.decrypt(pt);
				out=Hex.fromArray(pt);
				assert("comparing " + pts[i] + " to " + out, pts[i] == out);
			}
		}

	}
}

